package cn.zn.sync.utils;

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import cn.zn.base.exception.CustomException;
import cn.zn.sync.constants.SyncConstants;

import java.math.BigDecimal;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class SyncUtil {

    /**
     * 签名
     *
     * @param code code
     * @param salt 盐值
     * @return 结果
     */
    public static String sign(String code, String salt) {
        String codeMd5 = SecureUtil.md5(code);
        Date date = DateUtil.date();
        String year = DateUtil.format(date, "yyyy");
        String month = DateUtil.format(date, "MM");
        String day = DateUtil.format(date, "dd");
        String dateStr = year + salt + month + salt + day;
        return SecureUtil.md5(dateStr + codeMd5);
    }

    /**
     * 调用api接口
     *
     * @param password 密码
     * @param page     页数
     * @param pageSize 每页条数
     * @return 结果
     */
    public static String requestApi(String apiUrl, String password, int page, int pageSize, Map<String, Object> searchParams) {
        Map<String, Object> params = new HashMap<>();
        params.put("code", SyncConstants.CODE);
        params.put("passwd", password);
        params.put("page", page);
        params.put("pageSize", pageSize);
        if (MapUtil.isNotEmpty(searchParams)) {
            params.putAll(searchParams);
        }
        return HttpUtil.get(apiUrl, params);
    }

    /**
     * 调用api接口
     *
     * @param token 密码
     * @param page     页数
     * @param pageSize 每页条数
     * @return 结果
     */
    public static String requestApiByToken(String apiUrl, String token, int page, int pageSize, Map<String, Object> searchParams) {
        Map<String, Object> params = new HashMap<>();
        params.put("token", token);
        params.put("page", page);
        params.put("pageSize", pageSize);
        if (MapUtil.isNotEmpty(searchParams)) {
            params.putAll(searchParams);
        }
        return HttpUtil.get(apiUrl, params);
    }

    /**
     * 转换
     *
     * @param resBody 返回
     * @return 结果
     */
    public static JSONObject getJson(String resBody) {
        JSONObject json = JSONUtil.parseObj(resBody);
        if (!"0".equals(json.getStr("code")) && !"200".equals(json.getStr("code"))) {
            throw new CustomException(json.getStr("msg"));
        }
        return json;
    }

    public static Date parseDateTime(String date) {
        if (StrUtil.isNotBlank(date)) {
            return DateUtil.parse(date.replaceAll("-", "/"), "yyyy/MM/dd HH:mm:ss");
        }
        return null;
    }

    public static Date parseDate(String date) {
        if (StrUtil.isNotBlank(date)) {
            if (date.length() > 10) {
                date = date.substring(0, 10);
            }
            return DateUtil.parse(date.replaceAll("-", "/"), "yyyy/MM/dd");
        }
        return null;
    }

    public static BigDecimal parseBigDecimal(String value) {
        if (StrUtil.isBlank(value)) {
            return new BigDecimal("0");
        }

        if (!NumberUtil.isNumber(value.trim())) {
            return new BigDecimal("0");
        }

        return new BigDecimal(value.trim());
    }

}
